package com.sam.designpattern.singleton;

/**
 * @Author: Sam
 * @Date: 2022-07-22 15:40
 * @Description: 单例模式-懒汉式 双重检查加锁机制 线程安全
 */
public class LazySafeSingleton {

    //定义一个变量来存储类实例 用volatile修饰 使得执行可见性
    private volatile static LazySafeSingleton instance = null;

    //私有化构造方法，好在内部控制创建实例的数目
    private LazySafeSingleton() {
    }

    public static LazySafeSingleton getInstance() {
        //先检查实例是否存在，如果不存在就进去下面的同步块
        if(instance == null){
            //同步块，线程安全地创建实例
            synchronized (LazySafeSingleton.class){
                if(instance == null){
                    //再次检测实例是否存在，如果不存在就创建个实例
                    instance = new LazySafeSingleton();
                }
            }
        }
        return instance;
    }
}
